home *** CD-ROM | disk | FTP | other *** search
- Subject: v07i072: Public-domain TPUT (corrected implementation)
- Newsgroups: mod.sources
- Approved: mirror!rs
-
- Submitted by: seismo!rochester!ur-valhalla!badri (Badri Lokanathan)
- Mod.sources: Volume 7, Issue 72
- Archive-name: tput2
-
- After a lot of discussion with Mark Horton, I decided to make
- modifications to the format of tput so that it would be compatible with
- sys V shell scripts (my previous version unfortunately was not.) I am
- reposting the source so that you can either redistribute it or just
- archive it.
-
- Sorry for all the confusion.
- Badri Lokanathan
- ------------------------------------------
- #! /bin/sh
- # This is a shell archive, meaning:
- # 1. Remove everything above the #! /bin/sh line.
- # 2. Save the resulting text in a file.
- # 3. Execute the file with /bin/sh (not csh) to create:
- # README
- # Makefile
- # tput.1
- # tput.h
- # tput.c
- export PATH; PATH=/bin:/usr/bin:$PATH
- if test -f 'README'
- then
- echo shar: "will not over-write existing file 'README'"
- else
- cat << \xxTPUTxx > 'README'
- From: rochester!ur-valhalla!badri Sep 19 17:31:33 EDT 1986
- To: whom it may concern
- Subject: Public domain tput release 2
-
- This revision has undergone major changes after the first one, mainly
- because the first release was not compatible with SV tput.
- New features are:
-
- (1) Totally different capability naming conventions from first
- release, but equivalent to SV conventions.
-
- (2) Error messages are properly reported.
-
- (3) Can be used to query for properties of other terminals also.
-
- Problems still not properly handled:
- Limited features: Handles almost all termcap features, but is still
- only a subset of the latest version tput because terminfo has not been used.
- On the other hand if terminfo was available, most probably tput would
- be too!
-
- Thanks to Mark Horton @ cbosgd for suggestions.
- Badri Lokanathan
- --------------------------------------------------------------------------------
- From: rochester!ur-valhalla!badri Aug 28 10:02
- To: whom it may concern
- Subject: tput instructions
-
- This program is supposed to be equivalent to the system V utility
- tput, which handles screen parameters from termcap. It may take inputs
- in a slightly different format (basically because I wrote this program
- without actually having worked on tput.) Any suggestions/modifications
- are welcome.
-
- Your system is assumed to have termlib and associated functions (I
- wrote the program on BSD 4.2, assuming that termlib was fairly
- standard.) There is one include file in the program - sgtty.h which
- should be present. If not, I hope an equivalent exists.
- Other than that, the code should be fairly portable.
-
- The make file is delibrately trivial. It does not do any installation
- - just compilation.
-
- make
-
- will make tput in the current directory.
-
- make man
-
- will make a man page in tput.doc.
-
-
- tput, written by Badri Lokanathan, is in the public domain, and may be
- used by any person or organization, in any way and for any purpose.
- There is no warranty of merchantability nor any warranty of fitness for
- a particular purpose nor any other warranty, either express or implied,
- as to the accuracy of the enclosed materials or as to their suitability
- for any particular purpose. Accordingly, the author assumes no respon-
- sibility for their use by the recipient. Further, the author assumes
- no obligation to furnish any assistance of any kind whatsoever, or to
- furnish any additional information or documentation.
- xxTPUTxx
- fi
- if test -f 'Makefile'
- then
- echo shar: "will not over-write existing file 'Makefile'"
- else
- cat << \xxTPUTxx > 'Makefile'
- tput: tput.c tput.h
- cc -o tput tput.c -ltermlib
-
- man: tput.1
- nroff -man tput.1 > tput.doc
-
- dtput: tput.c tput.h
- cc -g -o dtput tput.c -ltermlib
-
- lint:
- lint -DLINT tput.c
- xxTPUTxx
- fi
- if test -f 'tput.1'
- then
- echo shar: "will not over-write existing file 'tput.1'"
- else
- cat << \xxTPUTxx > 'tput.1'
- .TH tput 1local "UR EE GRADUATE VLSI LAB"
- .SH NAME
- tput \- query termcap data base
- .SH SYNOPSIS
- .B tput
- [
- \fB-T\fRtype
- ]
- [
- \fB-e\fR
- ]
- capname
- [
- .I x
- .I y
- ]
- .SH DESCRIPTION
- .ad
- .I tput
- uses the \fItermcap(5)\fR data base to make terminal-dependent
- capabilities and information available to the shell. \fITput\fR outputs
- a string if the attribute (\fBcap\fRability \fBname\fR) is of type
- string, or an integer if the attribute is of type integer. If the
- attribute is of type Boolean, tput simply sets the exit code (0 for
- TRUE, 1 for FALSE) and does no output.
- .sp 1
- .ta 1i
- .fc #
- #\fB-T\fRtype#indicates the type of terminal. Normally this flag
- .br
- ##is unnecessary, as the default is taken from the
- .br
- ##environment variable \fB$TERM.\fR
- .br
- #\fB-e\fR#suppresses the printing of error messages. In case
- .br
- ##an error occurs, an error code is returned with or
- .br
- ##without this flag.
- .br
- #Capname#indicates the attribute (mapping to an attribute
- .br
- ##from the \f\Itermcap\f\R database.)
- .sp 1
- x and y are integer values for cursor movement.
- .sp 1
- Typical capname options are given below.
- .SH REQUESTS
- .in 0
- .ll 8i
- .ta .75i 1.5i 2.5i
- .B Option\tType\tTermcap\tExplanation
- .br
- am bool am Terminal has automatic margins
- .br
- bw bool bw cub1 wraps from column 0 to last column
- .br
- chts bool HC Cursor is hard to see.
- .br
- da bool da Display may be retained above the screen
- .br
- db bool db Display may be retained below the screen
- .br
- eo bool eo Can erase overstrikes with a blank
- .br
- eslok bool es Escape can be used on the status line
- .br
- gn bool gn Generic line type (e.g. dialup, switch).
- .br
- hc bool hc Hardcopy terminal
- .br
- hs bool hs Has extra "status line"
- .br
- hz bool hz Hazeltine; can't print ~'s
- .br
- in bool in Insert mode distinguishes nulls
- .br
- km bool km Has a meta key (shift, sets parity bit)
- .br
- mc5i bool 5i Printer won't echo on screen.
- .br
- mir bool mi Safe to move while in insert mode
- .br
- msgr bool ms Safe to move in standout modes
- .br
- npc bool NP Pad character doesn't exist.
- .br
- nrrmc bool NR Smcup does not reverse rmcup.
- .br
- nxon bool nx Padding won't work, xon/xoff required
- .br
- os bool os Terminal overstrikes
- .br
- ul bool ul underline character overstrikes
- .br
- xenl bool xn newline ignored after 80 cols (Concept)
- .br
- xhp bool xs Standout not erased by overwriting (hp)
- .br
- xon bool xo Terminal uses xon/xoff handshaking
- .br
- xsb bool xb Beehive (f1=escape, f2=ctrl C)
- .br
- xt bool xt Tabs destructive, magic so char (t1061)
- .br
- cols num co Number of columns in a line
- .br
- it num it Tabs initially every \# spaces.
- .br
- lh num lh \# rows in each label
- .br
- lines num li Number of lines on screen or page
- .br
- lm num lm Lines of memory if > lines. 0 => varies
- .br
- lw num lw \# cols in each label
- .br
- nlab num Nl \# of labels on screen (start at 1)
- .br
- pb num pb Lowest baud rate where padding needed
- .br
- vt num vt Virtual terminal number (CB/Unix)
- .br
- wsl num ws \# columns in status line
- .br
- xmc num sg Number blank chars left by smso or rmso
- .br
- acsc str ac Graphic charset pairs aAbBcC - def=vt100
- .br
- bel str bl Audible signal (bell)
- .br
- blink str mb Turn on blinking
- .br
- bold str md Turn on bold (extra bright) mode
- .br
- cbt str bt Back tab
- .br
- civis str vi Make cursor invisible
- .br
- clear str cl Clear screen (*)
- .br
- cmdch str CC Term. settable cmd char in prototype
- .br
- cnorm str ve Make cursor appear normal (undo vs/vi)
- .br
- cr str cr Carriage return (*)
- .br
- csr str cs change to lines \#1 thru \#2 (vt100) (G)
- .br
- cub str LE Move cursor left \#1 spaces (G)
- .br
- cub1 str le Move cursor left one space.
- .br
- cud str DO Move cursor down \#1 lines. (G*)
- .br
- cud1 str do Down one line
- .br
- cuf str RI Move cursor right \#1 spaces. (G*)
- .br
- cuf1 str nd Non-destructive space (cursor right)
- .br
- cup str cm Cursor motion to row \#1 col \#2 (G)
- .br
- cuu str UP Move cursor up \#1 lines. (G*)
- .br
- cuu1 str up Upline (cursor up)
- .br
- cvvis str vs Make cursor very visible
- .br
- dch str DC Delete \#1 chars (G*)
- .br
- dch1 str dc Delete character (*)
- .br
- dim str mh Turn on half-bright mode
- .br
- dl str DL Delete \#1 lines (G*)
- .br
- dl1 str dl Delete line (*)
- .br
- dsl str ds Disable status line
- .br
- ech str ec Erase \#1 characters (G)
- .br
- ed str cd Clear to end of display (*)
- .br
- el str ce Clear to end of line
- .br
- el1 str cb Clear to beginning of line, inclusive
- .br
- enacs str eA Enable alternate char set
- .br
- ff str ff Hardcopy terminal page eject (*)
- .br
- flash str vb Visible bell (may not move cursor)
- .br
- fsl str fs Return from status line
- .br
- hd str hd Half-line down (forward 1/2 linefeed)
- .br
- home str ho Home cursor (if no cup)
- .br
- hpa str ch Set cursor column (G)
- .br
- ht str ta Tab to next 8 space hardware tab stop.
- .br
- hts str st Set a tab in all rows, current column.
- .br
- hu str hu Half-line up (reverse 1/2 linefeed)
- .br
- ich str IC Insert \#1 blank chars (G*)
- .br
- ich1 str ic Insert character
- .br
- if str if Name of file containing is
- .br
- il str AL Add \#1 new blank lines (G*)
- .br
- il1 str al Add new blank line (*)
- .br
- ind str sf Scroll text up
- .br
- indn str SF Scroll forward \#1 lines. (G)
- .br
- invis str mk Turn on blank mode (chars invisible)
- .br
- ip str ip Insert pad after character inserted (*)
- .br
- iprog str iP Path name of program for init.
- .br
- is1 str i1 Terminal initialization string
- .br
- is2 str is Terminal initialization string
- .br
- is3 str i3 Terminal initialization string
- .br
- kBEG str &9 KEY_SBEG, 0572, shifted beginning key
- .br
- kCAN str &0 KEY_SCANCEL, 0573, shifted cancel key
- .br
- kCMD str *1 KEY_SCOMMAND, 0574, shifted command key
- .br
- kCPY str *2 KEY_SCOPY, 0575, shifted copy key
- .br
- kCRT str *3 KEY_SCREATE, 0576, shifted create key
- .br
- kDC str *4 KEY_SDC, 0577, shifted delete char key
- .br
- kDL str *5 KEY_SDL, 0600, shifted delete line key
- .br
- kEND str *7 KEY_SEND, 0602, shifted end key
- .br
- kEOL str *8 KEY_SEOL, 0603, shifted clear line key
- .br
- kEXT str *9 KEY_SEXIT, 0604, shifted exit key
- .br
- kFND str *0 KEY_SFIND, 0605, shifted find key
- .br
- kHLP str \#1 KEY_SHELP, 0606, shifted help key
- .br
- kHOM str \#2 KEY_SHOME, 0607, shifted home key
- .br
- kIC str \#3 KEY_SIC, 0610, shifted input key
- .br
- kLFT str \#4 KEY_SLEFT, 0611, shifted left arrow key
- .br
- kMOV str %b KEY_SMOVE, 0613, shifted move key
- .br
- kMSG str %a KEY_SMESSAGE, 0612, shifted message key
- .br
- kNXT str %c KEY_SNEXT, 0614, shifted next key
- .br
- kOPT str %d KEY_SOPTIONS, 0615, shifted options key
- .br
- kPRT str %f KEY_SPRINT, 0617, shifted print key
- .br
- kPRV str %e KEY_SPREVIOUS, 0616, shifted prev key
- .br
- kRDO str %g KEY_SREDO, 0620, shifted redo key
- .br
- kRES str %j KEY_SRSUME, 0623, shifted resume key
- .br
- kRIT str %i KEY_SRIGHT, 0622, shifted right arrow
- .br
- kRPL str %h KEY_SREPLACE, 0621, shifted replace key
- .br
- kSAV str !1 KEY_SSAVE, 0624, shifted save key
- .br
- kSPD str !2 KEY_SSUSPEND, 0625, shifted suspend key
- .br
- kUND str !3 KEY_SUNDO, 0626, shifted undo key
- .br
- ka1 str K1 KEY_A1, 0534, Upper left of keypad
- .br
- ka3 str K3 KEY_A3, 0535, Upper right of keypad
- .br
- kb2 str K2 KEY_B2, 0536, Center of keypad
- .br
- kbeg str @1 KEY_BEG, 0542, beg(inning) key
- .br
- kbs str kb KEY_BACKSPACE, 0407, Sent by backspace key
- .br
- kc1 str K4 KEY_C1, 0537, Lower left of keypad
- .br
- kc3 str K5 KEY_C3, 0540, Lower right of keypad
- .br
- kcan str @2 KEY_CANCEL, 0543, cancel key
- .br
- kcbt str kB KEY_BTAB, 0541, Back tab key
- .br
- kclo str @3 KEY_CLOSE, 0544, close key
- .br
- kclr str kC KEY_CLEAR, 0515, Sent by clear screen or erase key.
- .br
- kcmd str @4 KEY_COMMAND, 0545, cmd (command) key
- .br
- kcpy str @5 KEY_COPY, 0546, copy key
- .br
- kcrt str @6 KEY_CREATE, 0547, create key
- .br
- kctab str kt KEY_CTAB, 0525, Sent by clear-tab key
- .br
- kcub1 str kl KEY_LEFT, 0404, Sent by terminal left arrow key
- .br
- kcud1 str kd KEY_DOWN, 0402, Sent by terminal down arrow key
- .br
- kcuf1 str kr KEY_RIGHT, 0405, Sent by terminal right arrow key
- .br
- kcuu1 str ku KEY_UP, 0403, Sent by terminal up arrow key
- .br
- kdch1 str kD KEY_DC, 0512, Sent by delete character key.
- .br
- kdl1 str kL KEY_DL, 0510, Sent by delete line key.
- .br
- ked str kS KEY_EOS, 0516, Sent by clear-to-end-of-screen key.
- .br
- kel str kE KEY_EOL, 0517, Sent by clear-to-end-of-line key.
- .br
- kend str @7 KEY_END, 0550, end key
- .br
- kent str @8 KEY_ENTER, 0527, Enter/send (unreliable)
- .br
- kext str @9 KEY_EXIT, 0551, exit key
- .br
- kf0 str k0 KEY_F(0), 0410, function key f0.
- .br
- kf1 str k1 KEY_F(1), 0411, function key f1.
- .br
- kf10 str k; KEY_F(10), 0422, function key f10.
- .br
- kf11 str F1 KEY_F(11), 0423, function key f11.
- .br
- kf12 str F2 KEY_F(12), 0424, function key f12.
- .br
- kf13 str F3 KEY_F(13), 0425, function key f13.
- .br
- kf14 str F4 KEY_F(14), 0426, function key f14.
- .br
- kf15 str F5 KEY_F(15), 0427, function key f15.
- .br
- kf16 str F6 KEY_F(16), 0430, function key f16.
- .br
- kf17 str F7 KEY_F(17), 0431, function key f17.
- .br
- kf18 str F8 KEY_F(18), 0432, function key f18.
- .br
- kf19 str F9 KEY_F(19), 0433, function key f19.
- .br
- kf2 str k2 KEY_F(2), 0412, function key f2.
- .br
- kf20 str FA KEY_F(20), 0434, function key f20.
- .br
- kf21 str FB KEY_F(21), 0435, function key f21.
- .br
- kf22 str FC KEY_F(22), 0436, function key f22.
- .br
- kf23 str FD KEY_F(23), 0437, function key f23.
- .br
- kf24 str FE KEY_F(24), 0440, function key f24.
- .br
- kf25 str FF KEY_F(25), 0441, function key f25.
- .br
- kf26 str FG KEY_F(26), 0442, function key f26.
- .br
- kf27 str FH KEY_F(27), 0443, function key f27.
- .br
- kf28 str FI KEY_F(28), 0444, function key f28.
- .br
- kf29 str FJ KEY_F(29), 0445, function key f29.
- .br
- kf3 str k3 KEY_F(3), 0413, function key f3.
- .br
- kf30 str FK KEY_F(30), 0446, function key f30.
- .br
- kf31 str FL KEY_F(31), 0447, function key f31.
- .br
- kf32 str FM KEY_F(32), 0450, function key f32.
- .br
- kf33 str FN KEY_F(13), 0451, function key f13.
- .br
- kf34 str FO KEY_F(34), 0452, function key f34.
- .br
- kf35 str FP KEY_F(35), 0453, function key f35.
- .br
- kf36 str FQ KEY_F(36), 0454, function key f36.
- .br
- kf37 str FR KEY_F(37), 0455, function key f37.
- .br
- kf38 str FS KEY_F(38), 0456, function key f38.
- .br
- kf39 str FT KEY_F(39), 0457, function key f39.
- .br
- kf4 str k4 KEY_F(4), 0414, function key f4.
- .br
- kf40 str FU KEY_F(40), 0460, function key f40.
- .br
- kf41 str FV KEY_F(41), 0461, function key f41.
- .br
- kf42 str FW KEY_F(42), 0462, function key f42.
- .br
- kf43 str FX KEY_F(43), 0463, function key f43.
- .br
- kf44 str FY KEY_F(44), 0464, function key f44.
- .br
- kf45 str FZ KEY_F(45), 0465, function key f45.
- .br
- kf46 str Fa KEY_F(46), 0466, function key f46.
- .br
- kf47 str Fb KEY_F(47), 0467, function key f47.
- .br
- kf48 str Fc KEY_F(48), 0470, function key f48.
- .br
- kf49 str Fd KEY_F(49), 0471, function key f49.
- .br
- kf5 str k5 KEY_F(5), 0415, function key f5.
- .br
- kf50 str Fe KEY_F(50), 0472, function key f50.
- .br
- kf51 str Ff KEY_F(51), 0473, function key f51.
- .br
- kf52 str Fg KEY_F(52), 0474, function key f52.
- .br
- kf53 str Fh KEY_F(53), 0475, function key f53.
- .br
- kf54 str Fi KEY_F(54), 0476, function key f54.
- .br
- kf55 str Fj KEY_F(55), 0477, function key f55.
- .br
- kf56 str Fk KEY_F(56), 0500, function key f56.
- .br
- kf57 str Fl KEY_F(57), 0501, function key f57.
- .br
- kf58 str Fm KEY_F(58), 0502, function key f58.
- .br
- kf59 str Fn KEY_F(59), 0503, function key f59.
- .br
- kf6 str k6 KEY_F(6), 0416, function key f6.
- .br
- kf60 str Fo KEY_F(60), 0504, function key f60.
- .br
- kf61 str Fp KEY_F(61), 0505, function key f61.
- .br
- kf62 str Fq KEY_F(62), 0506, function key f62.
- .br
- kf63 str Fr KEY_F(63), 0507, function key f63.
- .br
- kf7 str k7 KEY_F(7), 0417, function key f7.
- .br
- kf8 str k8 KEY_F(8), 0420, function key f8.
- .br
- kf9 str k9 KEY_F(9), 0421, function key f9.
- .br
- kfnd str @0 KEY_FIND, 0552, find key
- .br
- khlp str %1 KEY_HELP, 0553, help key
- .br
- khome str kh KEY_HOME, 0406, Sent by home key.
- .br
- khts str kT KEY_STAB, 0524, Sent by set-tab key
- .br
- kich1 str kI KEY_IC, 0513, Sent by ins char/enter ins mode key.
- .br
- kil1 str kA KEY_IL, 0511, Sent by insert line.
- .br
- kind str kF KEY_SF, 0520, Sent by scroll-forward/down key
- .br
- kll str kH KEY_LL, 0533, Sent by home-down key
- .br
- kmov str %4 KEY_MOVE, 0556, move key
- .br
- kmrk str %2 KEY_MARK, 0554, mark key
- .br
- kmsg str %3 KEY_MESSAGE, 0555, message key
- .br
- knp str kN KEY_NPAGE, 0522, Sent by next-page key
- .br
- knxt str %5 KEY_NEXT, 0557, next object key
- .br
- kopn str %6 KEY_OPEN, 0560, open key
- .br
- kopt str %7 KEY_OPTIONS, 0561, options key
- .br
- kpp str kP KEY_PPAGE, 0523, Sent by previous-page key
- .br
- kprt str %9 KEY_PRINT, 0532, print or copy
- .br
- kprv str %8 KEY_PREVIOUS, 0562, previous object key
- .br
- krdo str %0 KEY_REDO, 0563, redo key
- .br
- kref str &1 KEY_REFERENCE, 0564, ref(erence) key
- .br
- kres str &5 KEY_RESUME, 0570, resume key
- .br
- krfr str &2 KEY_REFRESH, 0565, refresh key
- .br
- kri str kR KEY_SR, 0521, Sent by scroll-backward/up key
- .br
- krmir str kM KEY_EIC, 0514, Sent by rmir or smir in insert mode.
- .br
- krpl str &3 KEY_REPLACE, 0566, replace key
- .br
- krst str &4 KEY_RESTART, 0567, restart key
- .br
- ksav str &6 KEY_SAVE, 0571, save key
- .br
- kslt str *6 KEY_SELECT, 0601, select key
- .br
- kspd str &7 KEY_SUSPEND, 0627, suspend key
- .br
- ktbc str ka KEY_CATAB, 0526, Sent by clear-all-tabs key.
- .br
- kund str &8 KEY_UNDO, 0630, undo key
- .br
- lf0 str l0 Labels on function key f0 if not f0
- .br
- lf1 str l1 Labels on function key f1 if not f1
- .br
- lf10 str la Labels on function key f10 if not f10
- .br
- lf2 str l2 Labels on function key f2 if not f2
- .br
- lf3 str l3 Labels on function key f3 if not f3
- .br
- lf4 str l4 Labels on function key f4 if not f4
- .br
- lf5 str l5 Labels on function key f5 if not f5
- .br
- lf6 str l6 Labels on function key f6 if not f6
- .br
- lf7 str l7 Labels on function key f7 if not f7
- .br
- lf8 str l8 Labels on function key f8 if not f8
- .br
- lf9 str l9 Labels on function key f9 if not f9
- .br
- ll str ll Last line, first column (if no cup)
- .br
- mc0 str ps Print contents of the screen
- .br
- mc4 str pf Turn off the printer
- .br
- mc5 str po Turn on the printer
- .br
- mc5p str pO Turn on the printer for \#1 bytes.
- .br
- mgc str MC Clear left and right soft margins
- .br
- mrcup str CM Memory relative cursor addressing.
- .br
- nel str nw Newline (behaves like cr followed by lf)
- .br
- pad str pc Pad character (rather than null)
- .br
- pfkey str pk Prog funct key \#1 to type string \#2
- .br
- pfloc str pl Prog funct key \#1 to execute string \#2
- .br
- pfx str px Prog funct key \#1 to xmit string \#2
- .br
- pln str pn Prog label \#1 to show string \#2
- .br
- prot str mp Turn on protected mode
- .br
- rc str rc Restore cursor to position of last sc.
- .br
- rep str rp Repeat char \#1 \#2 times. (G*)
- .br
- rev str mr Turn on reverse video mode
- .br
- rf str rf Name of file containing reset string.
- .br
- rfi str RF send next input char (for ptys)
- .br
- ri str sr Scroll text down
- .br
- rin str SR Scroll backward \#1 lines. (G)
- .br
- rmacs str ae End alternate character set
- .br
- rmam str RA Turn off automatic margins
- .br
- rmcup str te String to end programs that use cup
- .br
- rmdc str ed End delete mode
- .br
- rmir str ei End insert mode;
- .br
- rmkx str ke Out of "keypad transmit" mode
- .br
- rmln str LF Turn off soft labels
- .br
- rmm str mo Turn off "meta mode"
- .br
- rmp str rP Like ip but when in replace mode
- .br
- rmso str se End stand out mode
- .br
- rmul str ue End underscore mode
- .br
- rmxon str RX Turn off xon/xoff handshaking
- .br
- rs1 str r1 Reset terminal completely to sane modes.
- .br
- rs2 str r2 Reset terminal completely to sane modes.
- .br
- rs3 str r3 Reset terminal completely to sane modes.
- .br
- sc str sc Save cursor position.
- .br
- sgr str sa Define the video attributes (G9)
- .br
- sgr0 str me Turn off all attributes
- .br
- smacs str as Start alternate character set
- .br
- smam str SA Turn on automatic margins
- .br
- smcup str ti String to begin programs that use cup
- .br
- smdc str dm Delete mode (enter)
- .br
- smgl str ML Set soft left margin
- .br
- smgr str MR Set soft right margin
- .br
- smir str im Insert mode (enter);
- .br
- smkx str ks Put terminal in "keypad transmit" mode
- .br
- smln str LO Turn on soft labels
- .br
- smm str mm Turn on "meta mode" (8th bit)
- .br
- smso str so Begin stand out mode
- .br
- smul str us Start underscore mode
- .br
- smxon str SX Turn on xon/xoff handshaking
- .br
- tbc str ct Clear all tab stops.
- .br
- tsl str ts Go to status line, col \#1
- .br
- uc str uc Underscore one char and move past it
- .br
- vpa str cv Like hpa but sets row. (G)
- .br
- wind str wi Current window is lines \#1-\#2 cols \#3-\#4
- .br
- xoffc str XF X-off character
- .br
- xonc str XN X-on character
- .br
- .ad
- .ll 6.5i
- .in .5i
- .SH FILES
- /etc/termcap
- .SH SEE ALSO
- termcap(3X), termcap(5)
- .SH DIAGNOSTICS
- Tput prints error messages (unless suppressed using -e) and returns
- the following error codes on error:
- .br
- #-1#Usage error.
- .br
- #-2#Bad terminal type.
- .br
- #-3#Bad capname.
- .sp 1
- .SH BUGS
- Complex capnames with many auxiliary parameters (such as sgr) do
- not work properly because curses has not been used - this program
- is based entirely on termcap (and that too from BSD4.2 manuals!)
- .PP
- -n option does not work for most capnames, so it has not been
- mentioned in this page.
- xxTPUTxx
- fi
- if test -f 'tput.h'
- then
- echo shar: "will not over-write existing file 'tput.h'"
- else
- cat << \xxTPUTxx > 'tput.h'
- /*
- * Copyright (C) $Date: 86/09/19 17:01:07 $
- * by $Author: badri $
- * University of Rochester,
- * Department of Electrical Engineering.
- *
- * CoNtEnTs This file contains various definitions for tput.
- *
- * $Locker: $
- * $Source: /u/users/badri/usr/src/local/tput/RCS/tput.h,v $
- * $Revision: 1.2 $
- *
- * History of this release:
- * $Log: tput.h,v $
- * Revision 1.2 86/09/19 17:01:07 badri
- * Did some rearranging of things. Also incorporated error messages.
- *
- * Revision 1.1 86/09/18 15:48:24 badri
- * Initial revision
- *
- */
- #include <sgtty.h>
- #include <stdio.h>
-
- #ifndef XTABS
- #define XTABS 0006000
- #endif XTABS
-
- #define LARGEBUF 1024
- #define SMALLBUF 64
-
- #define SYSTEM 666
- #define FAILURE 1
- #define SUCCESS 0
- #define BADUSE -1
- #define BADTERM -2
- #define BADCAP -3
- /*
- * To add new capabilities, increment table size and define the
- * capability in the appropriate slot in the structure. Note that
- * the capabilities are lexicographically ordered. This ordering
- * must be maintained for the binary search to work.
- * Format for entry is
- * {"capability", "termcap_key"},
- */
- #define TABLESIZE 310
- struct {char *key, *value} table[TABLESIZE] = {
- {"acsc", "ac"},
- {"am", "am"},
- {"bel", "bl"},
- {"blink", "mb"},
- {"bold", "md"},
- {"bw", "bw"},
- {"cbt", "bt"},
- {"chts", "HC"},
- {"civis", "vi"},
- {"clear", "cl"},
- {"cmdch", "CC"},
- {"cnorm", "ve"},
- {"cols", "co"},
- {"cr", "cr"},
- {"csr", "cs"},
- {"cub", "LE"},
- {"cub1", "le"},
- {"cud", "DO"},
- {"cud1", "do"},
- {"cuf", "RI"},
- {"cuf1", "nd"},
- {"cup", "cm"},
- {"cuu", "UP"},
- {"cuu1", "up"},
- {"cvvis", "vs"},
- {"da", "da"},
- {"db", "db"},
- {"dch", "DC"},
- {"dch1", "dc"},
- {"dim", "mh"},
- {"dl", "DL"},
- {"dl1", "dl"},
- {"dsl", "ds"},
- {"ech", "ec"},
- {"ed", "cd"},
- {"el", "ce"},
- {"el1", "cb"},
- {"enacs", "eA"},
- {"eo", "eo"},
- {"eslok", "es"},
- {"ff", "ff"},
- {"flash", "vb"},
- {"fsl", "fs"},
- {"gn", "gn"},
- {"hc", "hc"},
- {"hd", "hd"},
- {"home", "ho"},
- {"hpa", "ch"},
- {"hs", "hs"},
- {"ht", "ta"},
- {"hts", "st"},
- {"hu", "hu"},
- {"hz", "hz"},
- {"ich", "IC"},
- {"ich1", "ic"},
- {"if", "if"},
- {"il", "AL"},
- {"il1", "al"},
- {"in", "in"},
- {"ind", "sf"},
- {"indn", "SF"},
- {"invis", "mk"},
- {"ip", "ip"},
- {"iprog", "iP"},
- {"is1", "i1"},
- {"is2", "is"},
- {"is3", "i3"},
- {"it", "it"},
- {"kBEG", "&9"},
- {"kCAN", "&0"},
- {"kCMD", "*1"},
- {"kCPY", "*2"},
- {"kCRT", "*3"},
- {"kDC", "*4"},
- {"kDL", "*5"},
- {"kEND", "*7"},
- {"kEOL", "*8"},
- {"kEXT", "*9"},
- {"kFND", "*0"},
- {"kHLP", "#1"},
- {"kHOM", "#2"},
- {"kIC", "#3"},
- {"kLFT", "#4"},
- {"kMOV", "%b"},
- {"kMSG", "%a"},
- {"kNXT", "%c"},
- {"kOPT", "%d"},
- {"kPRT", "%f"},
- {"kPRV", "%e"},
- {"kRDO", "%g"},
- {"kRES", "%j"},
- {"kRIT", "%i"},
- {"kRPL", "%h"},
- {"kSAV", "!1"},
- {"kSPD", "!2"},
- {"kUND", "!3"},
- {"ka1", "K1"},
- {"ka3", "K3"},
- {"kb2", "K2"},
- {"kbeg", "@1"},
- {"kbs", "kb"},
- {"kc1", "K4"},
- {"kc3", "K5"},
- {"kcan", "@2"},
- {"kcbt", "kB"},
- {"kclo", "@3"},
- {"kclr", "kC"},
- {"kcmd", "@4"},
- {"kcpy", "@5"},
- {"kcrt", "@6"},
- {"kctab", "kt"},
- {"kcub1", "kl"},
- {"kcud1", "kd"},
- {"kcuf1", "kr"},
- {"kcuu1", "ku"},
- {"kdch1", "kD"},
- {"kdl1", "kL"},
- {"ked", "kS"},
- {"kel", "kE"},
- {"kend", "@7"},
- {"kent", "@8"},
- {"kext", "@9"},
- {"kf0", "k0"},
- {"kf1", "k1"},
- {"kf10", "k;"},
- {"kf11", "F1"},
- {"kf12", "F2"},
- {"kf13", "F3"},
- {"kf14", "F4"},
- {"kf15", "F5"},
- {"kf16", "F6"},
- {"kf17", "F7"},
- {"kf18", "F8"},
- {"kf19", "F9"},
- {"kf2", "k2"},
- {"kf20", "FA"},
- {"kf21", "FB"},
- {"kf22", "FC"},
- {"kf23", "FD"},
- {"kf24", "FE"},
- {"kf25", "FF"},
- {"kf26", "FG"},
- {"kf27", "FH"},
- {"kf28", "FI"},
- {"kf29", "FJ"},
- {"kf3", "k3"},
- {"kf30", "FK"},
- {"kf31", "FL"},
- {"kf32", "FM"},
- {"kf33", "FN"},
- {"kf34", "FO"},
- {"kf35", "FP"},
- {"kf36", "FQ"},
- {"kf37", "FR"},
- {"kf38", "FS"},
- {"kf39", "FT"},
- {"kf4", "k4"},
- {"kf40", "FU"},
- {"kf41", "FV"},
- {"kf42", "FW"},
- {"kf43", "FX"},
- {"kf44", "FY"},
- {"kf45", "FZ"},
- {"kf46", "Fa"},
- {"kf47", "Fb"},
- {"kf48", "Fc"},
- {"kf49", "Fd"},
- {"kf5", "k5"},
- {"kf50", "Fe"},
- {"kf51", "Ff"},
- {"kf52", "Fg"},
- {"kf53", "Fh"},
- {"kf54", "Fi"},
- {"kf55", "Fj"},
- {"kf56", "Fk"},
- {"kf57", "Fl"},
- {"kf58", "Fm"},
- {"kf59", "Fn"},
- {"kf6", "k6"},
- {"kf60", "Fo"},
- {"kf61", "Fp"},
- {"kf62", "Fq"},
- {"kf63", "Fr"},
- {"kf7", "k7"},
- {"kf8", "k8"},
- {"kf9", "k9"},
- {"kfnd", "@0"},
- {"khlp", "%1"},
- {"khome", "kh"},
- {"khts", "kT"},
- {"kich1", "kI"},
- {"kil1", "kA"},
- {"kind", "kF"},
- {"kll", "kH"},
- {"km", "km"},
- {"kmov", "%4"},
- {"kmrk", "%2"},
- {"kmsg", "%3"},
- {"knp", "kN"},
- {"knxt", "%5"},
- {"kopn", "%6"},
- {"kopt", "%7"},
- {"kpp", "kP"},
- {"kprt", "%9"},
- {"kprv", "%8"},
- {"krdo", "%0"},
- {"kref", "&1"},
- {"kres", "&5"},
- {"krfr", "&2"},
- {"kri", "kR"},
- {"krmir", "kM"},
- {"krpl", "&3"},
- {"krst", "&4"},
- {"ksav", "&6"},
- {"kslt", "*6"},
- {"kspd", "&7"},
- {"ktbc", "ka"},
- {"kund", "&8"},
- {"lf0", "l0"},
- {"lf1", "l1"},
- {"lf10", "la"},
- {"lf2", "l2"},
- {"lf3", "l3"},
- {"lf4", "l4"},
- {"lf5", "l5"},
- {"lf6", "l6"},
- {"lf7", "l7"},
- {"lf8", "l8"},
- {"lf9", "l9"},
- {"lh", "lh"},
- {"lines", "li"},
- {"ll", "ll"},
- {"lm", "lm"},
- {"lw", "lw"},
- {"mc0", "ps"},
- {"mc4", "pf"},
- {"mc5", "po"},
- {"mc5i", "5i"},
- {"mc5p", "pO"},
- {"mgc", "MC"},
- {"mir", "mi"},
- {"mrcup", "CM"},
- {"msgr", "ms"},
- {"nel", "nw"},
- {"nlab", "Nl"},
- {"npc", "NP"},
- {"nrrmc", "NR"},
- {"nxon", "nx"},
- {"os", "os"},
- {"pad", "pc"},
- {"pb", "pb"},
- {"pfkey", "pk"},
- {"pfloc", "pl"},
- {"pfx", "px"},
- {"pln", "pn"},
- {"prot", "mp"},
- {"rc", "rc"},
- {"rep", "rp"},
- {"rev", "mr"},
- {"rf", "rf"},
- {"rfi", "RF"},
- {"ri", "sr"},
- {"rin", "SR"},
- {"rmacs", "ae"},
- {"rmam", "RA"},
- {"rmcup", "te"},
- {"rmdc", "ed"},
- {"rmir", "ei"},
- {"rmkx", "ke"},
- {"rmln", "LF"},
- {"rmm", "mo"},
- {"rmp", "rP"},
- {"rmso", "se"},
- {"rmul", "ue"},
- {"rmxon", "RX"},
- {"rs1", "r1"},
- {"rs2", "r2"},
- {"rs3", "r3"},
- {"sc", "sc"},
- {"sgr", "sa"},
- {"sgr0", "me"},
- {"smacs", "as"},
- {"smam", "SA"},
- {"smcup", "ti"},
- {"smdc", "dm"},
- {"smgl", "ML"},
- {"smgr", "MR"},
- {"smir", "im"},
- {"smkx", "ks"},
- {"smln", "LO"},
- {"smm", "mm"},
- {"smso", "so"},
- {"smul", "us"},
- {"smxon", "SX"},
- {"tbc", "ct"},
- {"tsl", "ts"},
- {"uc", "uc"},
- {"ul", "ul"},
- {"vpa", "cv"},
- {"vt", "vt"},
- {"wind", "wi"},
- {"wsl", "ws"},
- {"xenl", "xn"},
- {"xhp", "xs"},
- {"xmc", "sg"},
- {"xoffc", "XF"},
- {"xon", "xo"},
- {"xonc", "XN"},
- {"xsb", "xb"},
- {"xt", "xt"}
- };
-
- int errno;
- unsigned short errsup = 0;
- xxTPUTxx
- fi
- if test -f 'tput.c'
- then
- echo shar: "will not over-write existing file 'tput.c'"
- else
- cat << \xxTPUTxx > 'tput.c'
- #ifndef LINT
- static char rcsid[] = "$Header: tput.c,v 1.6 86/09/19 17:01:00 badri Exp $" ;
- #endif LINT
- /*
- * Copyright (C) $Date: 86/09/19 17:01:00 $
- * by $Author: badri $
- * University of Rochester,
- * Department of Electrical Engineering.
- *
- * CoNtEnTs This file contains a program to emulate the system V
- * CoNtEnTs version of tput.
- *
- * $Locker: $
- * $Source: /u/users/badri/usr/src/local/tput/RCS/tput.c,v $
- * $Revision: 1.6 $
- *
- * History of this release:
- * $Log: tput.c,v $
- * Revision 1.6 86/09/19 17:01:00 badri
- * Updated to incorporate -e flag etc.
- *
- * Revision 1.5 86/09/18 20:58:09 badri
- * Rewrote match, which had a bug in it!
- *
- * Revision 1.4 86/09/18 15:43:34 badri
- * Updated to incorporate all flags of the old SV tput plus cursor movement
- * plus -n flag to affect number of lines (if permitted.)
- *
- * Revision 1.3 86/09/18 15:34:51 badri
- * This is an interim version to make tput more compatible with SV.
- * Mods suggested by mark@cbosgd (Mark Horton)
- *
- * Revision 1.2 86/08/22 13:39:27 badri
- * 1. Corrected a bug that would cause %d to fail after %%.
- * 2. Included XTABS handling.
- * 3. General cleanup of code.
- * 1. Corrected a bug that would cause %d to fail after %%.
- * 2. Included XTABS handling.
- * 3. General cleanup of code.
- *
- * Revision 1.1 86/08/21 19:23:33 badri
- * Initial revision
- *
- */
- #include "tput.h"
-
- main(argc,argv)
- int argc;
- char *argv[];
- {
- char bp[LARGEBUF], *getenv(), *tgetstr(), *tgoto(),
- buf[SMALLBUF], *id, *area, *ptr;
- int outc();
- struct sgttyb ttyprm;
- unsigned short ttyflg, arg, start, pos, end;
- long affcnt, val;
-
- if (argc < 2) quit(BADUSE,"fubar");
-
- arg = 1;
- affcnt = 1;
- val = -1; /* This is used for examining if type of
- * terminal is explicitly specified.
- */
-
- while (argv[arg][0] == '-')
- {
- switch (argv[arg][1])
- {
- case 'T': /* Terminal type */
- if (argv[arg][2] == '\0' || argc < 3)
- quit(BADUSE,"fubar");
-
- if (tgetent(bp,&argv[arg][2]) < 1)
- quit(BADTERM,&argv[arg][2]);
- val = 0;
- break;
-
- case 'e': /* Suppress printing of error message */
- errsup = 1;
- break;
-
- case 'n': /* No. of affected lines */
- affcnt = atoi(&argv[arg][2]);
- break;
-
- default:
- quit(BADUSE,"fubar");
- }
- arg++;
- }
- if (val < 0)
- if (tgetent(bp,getenv("TERM")) < 1)
- quit(BADTERM,"in environment variable TERM");
-
- /* Begin a binary search for capability in table */
- for (start = 0, end = TABLESIZE - 1, pos = (end - start) >> 1;
- end - start > 1; pos = start + ((end - start) >> 1))
- {
- switch (match(argv[arg],table[pos].key))
- {
- case -1: /* Lexicographically less than pos */
- end = pos;
- continue;
-
- case 0: /* A hit! */
- id = table[pos].value;
- goto WORK;
-
- case 1: /* Lexicographically greater than pos. */
- start = pos;
- continue;
- }
- }
-
- /* Examine the current start and end positions of table for match */
- if (!match(argv[arg],table[start].key)) id = table[start].value;
- else if (!match(argv[arg],table[end].key)) id = table[end].value;
- else quit(BADCAP,argv[arg]); /* Could not find capability in table */
-
- WORK:
- /* At this point we know that the capability exists in our
- * table, but we do not know if it is of type boolean, string
- * or has a numeric value (or does not exist.)
- */
- if ((val = tgetnum(id)) != -1)
- {
- /* It has a numeric value. Print it and quit. */
- fprintf(stdout, "%d\n",val);
- quit(SUCCESS,"tput");
- }
-
- /* It is of type string (or boolean) */
- area = buf;
- if (!tgetstr(id,&area))
- {
- /* Boolean */
- if (tgetflag(id)) quit(SUCCESS,"tput");
- else quit(FAILURE,"tput");
- }
- /*
- * It is of type string.
- * Examine if cursor movement specified. This is done
- * by looking for % followed by any but %. Since %%
- * is a single %, we have to make sure that %% followed
- * by any but % is not interpreted as a format.
- * If cursor movement is specified then tgoto needs
- * to be invoked. Else put as is.
- */
- ptr = buf;
- while (*ptr != '\0')
- {
- if (*(ptr++) != '%') continue;
- if (*ptr != '\0' && *(ptr++) != '%')
- {
- /* This string is a cm string. Increment arg to
- * position it over the numeric argument (if specified!)
- */
- if (argc - ++arg < 2) quit(BADUSE,"fubar");
-
- if (*(ptr=tgoto(buf,atoi(argv[arg+1]),atoi(argv[arg])))
- == 'O' && *(ptr+1) == 'O' &&
- *(ptr+2) == 'P' && *(ptr+3) == 'S')
- quit(BADUSE,"fubar");
-
- /* Turn off XTABS, but save old flags first. */
- if (gtty(fileno(stdout),&ttyprm) < 0)
- quit(SYSTEM,"fubar");
- ttyflg = ttyprm.sg_flags;
-
- ttyprm.sg_flags &= ~XTABS;
- if (stty(fileno(stdout),&ttyprm) < 0)
- quit(SYSTEM,"fubar");
-
- tputs(ptr,affcnt,outc);
-
- /* Restore old flags. */
- ttyprm.sg_flags = ttyflg;
- if (stty(fileno(stdout),&ttyprm) < 0)
- quit(SYSTEM,"fubar");
- quit(SUCCESS,"tput");
- }
- quit(BADUSE,"fubar");
- }
- tputs(buf,affcnt,outc);
- quit(SUCCESS,"tput");
- }
-
- outc(c)
- char c;
- {
- if (write(fileno(stdout),&c,sizeof(char)) < 0)
- quit(SYSTEM,"fubar");
- return(SUCCESS);
- }
-
- match(s1,s2)
- char *s1, *s2;
- {
- while (*s1 == *s2)
- {
- if (*s1 == '\0') return(0);
- s1++, s2++;
- }
- return(*s1 > *s2 ? 1:-1);
- }
-
- quit(i,s)
- int i;
- char *s;
- {
- if (errsup)
- {
- if (i < SYSTEM) exit(i);
- else exit(errno);
- }
- switch(i)
- {
- case SUCCESS:
- case FAILURE:
- exit(i);
-
- case BADUSE:
- fprintf(stderr,
- "Usage: tput [ -Ttype ] [ -e ] [ -nlines ] capname [ x y ]\n");
- exit(i);
-
- case BADTERM:
- fprintf(stderr, "Bad terminal type: %s\n",s);
- exit(i);
-
- case BADCAP:
- fprintf(stderr, "Bad capability: %s\n",s);
- exit(i);
-
- case SYSTEM:
- fprintf(stderr, "Terminal I/O error - examine exit status\n");
- exit(errno);
- }
- }
- xxTPUTxx
- fi
- exit 0
- # End of shell archive
-
-